NameNode和DataNode工作原理(图形化通俗易懂) 您所在的位置:网站首页 putfile datanode NameNode和DataNode工作原理(图形化通俗易懂)

NameNode和DataNode工作原理(图形化通俗易懂)

2023-12-25 02:11| 来源: 网络整理| 查看: 265

NameNode和DataNode工作原理组件模块说明NameNode工作原理第一阶段: NameNode 启动第二阶段: Secondary NameNode 工作DataNode 工作机制组件模块说明

NameNode:存储文件的元数据。作用:管理HDFS的名称空间;配置副本策略;管理数据块(Block)映射信息;处理客户端读写请求。NameNode两个重要文件(内存中的镜像=fsimage+edits)。

fsimage:元数据镜像文件。NameNode的元数据存放在内存中,为了断电不丢数据,因此需要在磁盘中备份元数据。

edits:元数据操作日志(针对目录树的修改操作),被写入共享存储系统中, 如NFS、 JournalNode。当在内存中的元数据更新时,如果同时更新 FsImage,就会导致效率过低,但如果不更新,就会发生一致性问题,一旦 NameNode 节点断电,就会产生数据丢失。 因此,引入 Edits 文件(只进行追加操作,效率很高) 。每当元数据有更新或者添加元数据时,修改内存中的元数据并追加到 Edits 中。 这样,一旦 NameNode 节点断电,可以通过 FsImage 和 Edits 的合并,合成元数据。

SecondaryNamenode:如果长时间添加数据到 Edits 中,会导致该文件数据过大,效率降低,而且一旦断电,恢复元数据需要的时间过长。因此,需要定期进行 FsImage 和 Edits 的合并,如果这个操作由 NameNode完成,又会效率过低。因此,引入一个新的组件SecondaryNamenode,专门用于 FsImage 和 Edits 的合并。

DataNode:在本地文件系统存储文件块数据,以及块数据的校验和。作用:存储实际的数据块;执行数据块的读/写操作。

Checkpoints: 作用就是合并fsimage和Edits文件,然后生成最新的fsimage。时间设置:1.定时时间到,默认每隔一小时执行一次(dfs.namenode.checkpoint.period)。2.数据满了,默认一分钟检查一次操作次数,当操作次数达到 1 百万时, SecondaryNameNode 执行一次(dfs.namenode.checkpoint.check.period和dfs.namenode.checkpoint.txns)。

NameNode工作原理在这里插入图片描述在这里插入图片描述第一阶段: NameNode 启动第一次启动 NameNode 格式化(hdfs namenode -format)后, 创建 Fsimage 和 Edits 文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。客户端对元数据进行增删改的请求。NameNode 记录操作日志,更新滚动日志,写入edits_inprogress,先记录文件再写入内存。NameNode 在内存中对元数据进行增删改。第二阶段: Secondary NameNode 工作Secondary NameNode 询问 NameNode 是否需要 CheckPoint。Secondary NameNode 请求执行 CheckPoint。NameNode 滚动正在写的 Edits 日志,生成edits_inprogress_002记录正在写的日志,再把edits_inprogress_001改为edits_001。将滚动前的编辑日志(edits_001)和镜像文件(fsimage)拷贝到 Secondary NameNode。Secondary NameNode 加载编辑日志(edits_001)和镜像文件(fsimage)到内存,并合并。生成新的镜像文件 fsimage.chkpoint。拷贝 fsimage.chkpoint 到 NameNode。NameNode 将 fsimage.chkpoint 重新命名成 fsimage。DataNode 工作机制在这里插入图片描述在这里插入图片描述一个数据块在 DataNode 上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。DataNode 启动后向 NameNode 注册。注册成功。注册成功后,周期性(6 小时) 的向 NameNode 上报所有的块信息。心跳是每 3 秒一次,心跳返回结果带有 NameNode 给该 DataNode 的命令(如复制块数据到另一台机器,或删除某个数据块)。如果超过 10 分钟+30秒没有收到某个 DataNode 的心跳,则认为该节点不可用。

如果定义超时时间为TimeOut,则超时时长的计算公式为:

TimeOut = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval

而默认的dfs.namenode.heartbeat.recheck-interval 大小为5分钟,dfs.heartbeat.interval默认为3秒。即10 分钟+30秒。 源码位于hadoop-hdfs-project\hadoop-hdfs\src\main\java\org\apache\hadoop\hdfs\server\blockmanagement\DatanodeManager.java:

heartbeatIntervalSeconds = conf.getTimeDuration( DFSConfigKeys.DFS_HEARTBEAT_INTERVAL_KEY, DFSConfigKeys.DFS_HEARTBEAT_INTERVAL_DEFAULT, TimeUnit.SECONDS); heartbeatRecheckInterval = conf.getInt( DFSConfigKeys.DFS_NAMENODE_HEARTBEAT_RECHECK_INTERVAL_KEY, DFSConfigKeys.DFS_NAMENODE_HEARTBEAT_RECHECK_INTERVAL_DEFAULT); // 5 minutes this.heartbeatExpireInterval = 2 * heartbeatRecheckInterval + 10 * 1000 * heartbeatIntervalSeconds;


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有